// 使用路由守卫 beforeEach 做判断 判断那你进页面的时候是否登录

// 1. 未登录
//    1. 如果去的是白名单页面（就是不用登陆的页面） 直接放行
//    2. 如果去的需要登录的页面 就重定向到login页
// 2. 已登录 有两个接口 （登录接口 返回token, 个人信息接口 根据token获取用户信息（头像 名称 角色等））
//    1. 判断有没有角色
//       1. 有 下一步
//       2. 没有  根据token获取角色
//          1. 拿到角色去过滤权限路由表 返回一个新的过滤后的路由表
//             1. 把新路由表和默认路由表拼接起来  使用concat, 存到vuex中， layout页面做递归组件时 使用此数据
//          2. 把最初的默认路由和 新过滤的路由进行合并
//          3. 最后刷新一下页面
import router from "./router";
import store from "./store";
const whiteList = ["/login"]; // no redirect whitelist

router.beforeEach(async (to, from, next) => {
	// 判断是否登录
	const hasToken = store.state.user.token;
	if (hasToken) {
		// 去写vuex
		// 判断有没有角色
		const hasRole = store.state.user.role;
		if (hasRole) {
			// 说明已经获取过了直接放行
			next();
		} else {
			// 没有角色就获取角色
			const { role } = await store.dispatch("user/GET_INFO");
			// 根据角色去过滤路由表
			const syncRoute = await store.dispatch(
				"permission/FILTER_ROUTER",
				role
			);
			// 合并路由表
			router.addRoutes(syncRoute);
			// 刷新一下当前页面
			// next({path:to.path})
			next({ ...to, replace: true });
		}
	} else {
		// 可以判断是不是去白名单
		if (whiteList.indexOf(to.path) !== -1) {
			next();
		} else {
			next("/login");
		}
	}
});
